package com.mass.core.framework.security;

import java.util.Collection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

import com.mass.core.sys.user.model.SysUser;
import com.mass.core.sys.user.services.SysUserServices;

@Service
//@Component
public class CustomUserDetailsService implements UserDetailsService {
	
	@Autowired
	// 数据库服务类
	private SysUserServices sysUserService;

	
	public UserDetails loadUserByUsername(String userName)
			throws UsernameNotFoundException {
		// SUser对应数据库中的用户表，是最终存储用户和密码的表，可自定义
		// 本例使用SUser中的email作为用户名:
		SysUser user = sysUserService.checkAccountIsExist(userName);
		
		if (user == null) {
			throw new UsernameNotFoundException("UserName " + userName
					+ " not found");
		}

		// SecurityUser实现UserDetails并将SUser的Email映射为username
		SecurityUser securityUser = new SecurityUser(user);
		securityUser.setUserName(userName);
		@SuppressWarnings("unchecked")
		Collection<SimpleGrantedAuthority> authorities = (Collection<SimpleGrantedAuthority>) securityUser.getAuthorities();
		authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
		
		return securityUser;

	}

}
